import { PartialWithType } from './base';

/**
 * WHERE子句的比较运算符
 */
export type ComparisonOperator =
  | '='
  | '<>'
  | '>'
  | '>='
  | '<'
  | '<='
  | 'LIKE'
  | 'IN'
  | 'NOT IN'
  | 'IS NULL'
  | 'IS NOT NULL'
  | 'BETWEEN';

/**
 * WHERE条件
 */
export interface WhereCondition<T = any> {
  /**
   * 字段名
   */
  field: keyof T & string;
  /**
   * 比较运算符
   */
  operator: ComparisonOperator;
  /**
   * 比较值
   */
  value?: any;
}

/**
 * JOIN条件
 */
export interface JoinCondition {
  /**
   * 要连接的表
   */
  table: string;
  /**
   * 连接类型
   */
  type: 'INNER' | 'LEFT' | 'RIGHT' | 'FULL';
  /**
   * ON子句
   */
  on: string;
}

/**
 * ORDER BY条件
 */
export interface OrderCondition<T = any> {
  /**
   * 用于排序的字段
   */
  field: keyof T & string;
  /**
   * 排序方向
   */
  direction: 'ASC' | 'DESC';
}

/**
 * 查询选项基础接口
 */
export interface QueryOptionsBase<T> {
  /**
   * WHERE条件作为键值对
   */
  where?: PartialWithType<T>;
  /**
   * ORDER BY子句
   * 可以使用字符串（例如，'id DESC'）
   * 或对象格式（例如，{ id: 'DESC' }）
   */
  orderBy?: string | OrderByOption<T>;
  /**
   * 返回的最大结果数
   */
  limit?: number;
  /**
   * 要跳过的结果数
   */
  offset?: number;
}

/**
 * 查询实体的选项
 */
export interface QueryOptions<T> extends QueryOptionsBase<T> {}

/**
 * ORDER BY选项
 */
export type OrderByOption<T> = {
  [K in keyof T]?: 'ASC' | 'DESC';
}; 